/**
 * 表格列属性
 */
import { BaseModel } from '@/entity/base-model'
import { VNode } from 'vue'
interface TableColumnProps<T extends BaseModel = any> {
  // 标题
  title?: string
  // 键名
  dataIndex?: keyof T | 'action'
  // 宽度
  width?: number
  // 设置列的对齐方式
  align?: 'left' | 'center' | 'right'
  // 表头列合并,设置为 0 时，不渲染
  colSpan?: number
  // 超过宽度将自动省略，暂不支持和排序筛选一起使用。
  // 设置为 true 或 { showTitle?: boolean } 时，表格布局将变成 tableLayout="fixed"。
  ellipsis?: boolean | { showTitle?: boolean }
  // 列是否固定，可选 true(等效于 left) 'left' 'right'
  fixed?: boolean | 'left' | 'right'
  // 拖动列最大宽度，会受到表格自动调整分配宽度影响
  maxWidth?: number
  // 拖动列最小宽度，会受到表格自动调整分配宽度影响
  minWidth?: number
  // 是否可拖动调整宽度，此时 width 必须是 number 类型
  resizable?: number
  // 生成复杂数据的渲染函数，参数分别为当前行的值，当前行数据，行索引
  customRender?: (data: RenderProps<T>) => VNode | any
}

/**
 * 自定义列属性
 */
interface RenderProps<T> {
  text: string
  index: number
  record: T
  column: string
}
/**
 * 表格属性
 */
interface TableProps {
  requestPage: Function
}
export type { TableColumnProps, RenderProps, TableProps }
